package modelo.mapa;

public class Norte extends Borde{
        
	public Norte(Ubicacion unaUbicacion)
	{
	    super();
	    this.asignaParaQueDireccionSeDebeAumentarODisminuirDiagonal(unaUbicacion);
	}
	
	@Override
	public Ubicacion actualizarCoordenadasMovimientoRecto(Ubicacion unaUbicacion)
	{
	    return (new Ubicacion(unaUbicacion.obtenerCoordenadaX() + 1,unaUbicacion.obtenerCoordenadaY()));
	} 
	
	@Override
	public Ubicacion actualizarCoordenadasMovimientoDiagonal(Ubicacion unaUbicacion) 
	{
		this.contadorParaCambiarDireccionEnDiagonal++;
		if  (this.verificarSiSeDebeCambiarDireccionEnDiagonal())
		{
			if (this.direccionParaAumentarODisminuirCoordDiagonalSegunUbicacionOrigen == este)
			{
	    		return (new Ubicacion(unaUbicacion.obtenerCoordenadaX()+1,unaUbicacion.obtenerCoordenadaY()+1));
			}
			else
			{
				if (this.direccionParaAumentarODisminuirCoordDiagonalSegunUbicacionOrigen == oeste)
				{
	        		return (new Ubicacion(unaUbicacion.obtenerCoordenadaX()+1,unaUbicacion.obtenerCoordenadaY()-1));
				}
			}
		}
		else
		{
			return (new Ubicacion(unaUbicacion.obtenerCoordenadaX()+1,unaUbicacion.obtenerCoordenadaY()));
		}
		return unaUbicacion;        	
	}
	
	@Override
	public Ubicacion actualizarCoordenadasMovimientoZigZag(Ubicacion unaUbicacion) 
	{       
        if (this.deboAumentarCoordZigZag)
        {
            this.deboAumentarCoordZigZag = false;
            return (new Ubicacion(unaUbicacion.obtenerCoordenadaX() + 1,unaUbicacion.obtenerCoordenadaY()+1));
        }
        else
        {
            this.deboAumentarCoordZigZag = true;
            return (new Ubicacion(unaUbicacion.obtenerCoordenadaX() + 1,unaUbicacion.obtenerCoordenadaY()-1));
        }
	}

	@Override
	protected void asignaParaQueDireccionSeDebeAumentarODisminuirDiagonal(Ubicacion ubicacionOrigen) 
	{
		int distanciaHastaBordeEste = (Mapa.getInstance().obtenerCantidadColumnas() - 1 - ubicacionOrigen.obtenerCoordenadaY());
		if (ubicacionOrigen.obtenerCoordenadaY() < distanciaHastaBordeEste )
		{
			this.direccionParaAumentarODisminuirCoordDiagonalSegunUbicacionOrigen = este;
		}
		else
		{
			this.direccionParaAumentarODisminuirCoordDiagonalSegunUbicacionOrigen = oeste;
		}
		
	}
}